package bit;

public class UpTo2N {

    public static void main(String[] args) {
        System.out.println(tableSizeFor(17));
    }


    /**
     * 保证正整数的最高位1后面都是1，然后加1得到 2^n
     *
     * n |= n >>> 16 最多32位，能够保证最高位后面都是1
     * @param cap
     * @return
     */
    private static int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= Integer.MAX_VALUE) ? Integer.MAX_VALUE : n + 1;
    }

}
